#include <iostream>
#include <unistd.h>
#include <string>
using namespace std;
// template<class T, class ...Args>
// void ShowList()
// {
//     cout << endl;
// }
// template<class ...Args>
// void Showlist(T value, Args... args)
// {
//     cout << value << endl;
//     Showlist(args...);
// }
// // 供外部调用的函数
// template<class ...Args>
// void ShowList(Args... args)
// {
//     cout << "大小" << sizeof...(args) << " "; //获取参数包个数
//     // cout << value << " ";
//     Showlist(args...);
// }

//递归终止函数
// template<class T>
// void ShowListArg(const T& t)
// {
// 	cout << t << endl;
// }
// //展开函数
// template<class T, class ...Args>
// void ShowListArg(T value, Args... args)
// {
// 	cout << value << " "; //打印传入的若干参数中的第一个参数
// 	//ShowListArgs(args...);    //将剩下参数继续向下传
// }
// //供外部调用的函数
// template<class ...Args>
// void ShowList(Args... args)
// {
// 	ShowListArg(args...);
// }


// template<class ...Args>
// void ShowList(Args... args);
// //递归终止函数
// template<class T>
// void ShowListArg(const T& t)
// {
// 	cout << t << endl;
// }
// //展开函数
// template<class T, class ...Args>
// void ShowListArg(T value, Args... args)
// {
// 	cout << value << " "; //打印传入的若干参数中的第一个参数
// 	ShowList(args...);    //将剩下参数继续向下传
// }
// //供外部调用的函数
// template<class ...Args>
// void ShowList(Args... args)
// {
// 	ShowListArg(args...);
// }

// int main()
// {
//     ShowList();
// 	ShowList(1);
//     cout << endl;
// 	ShowList(1, 'A');
//     cout << endl;
// 	ShowList(1, 'A', string("hello"));
//     cout << endl;
// 	return 0;
// }

//展开函数
// template<class ...Args>
// void ShowList(Args... args)
// {
// 	int arr[] = { args... }; //列表初始化
// 	//打印参数包中的各个参数
// 	for (auto e : arr)
// 	{
// 		cout << e << " ";
// 	}
// 	cout << endl;
// }

// // 支持无参调用
// void ShowList()
// {
// 	cout << endl;
// }
// //处理函数
// template<class T>
// void PrintArg(const T& t,)
// {
// 	cout << t << " ";
// 	//return 0;
// }
// //展开函数
// template<class ...Args>
// void ShowList(Args... args)
// {
// 	int arr[] = { PrintArg(args, 0)... }; //列表初始化
// 	cout << endl;
// }

template<class ...Args>
void printargs(Args... args)
{
    cout << " come over";
    cout << endl;
}
// template<class T, class ...Args>
// void printargs(T value, Args... args)
// {
//     cout << "start";
//     cout << value <<" ";
//     //ShowList(args);
// }
template<class ...Args>
void ShowList(Args... args)
{
    cout << "start" << endl;
    int arr[] = { (printargs(args), 0)...};
    cout << endl;
}
// template<class T, class ...Args>
// void ShowListA()
// {
//     cout << endl;
// }
// template<class T, class ...Args>
// void ShowListA(T value, Args... args)
// {
//     cout << value << " ";
//     ShowListA(args...);
// }
// template<class ...Args>
// void ShowList(Args... args)
// {
//     ShowListA(args...);
// }

// //递归终止函数
// void ShowListArg()
// {
// 	cout << endl;
// }
// //展开函数
// template<class T, class ...Args>
// void ShowListArg(T value, Args... args)
// {
// 	cout << value << " "; //打印传入的若干参数中的第一个参数
// 	ShowListArg(args...); //将剩下参数继续向下传
// }
// //供外部调用的函数
// template<class ...Args>
// void ShowList(Args... args)
// {
// 	ShowListArg(args...);
// }

int main()
{
	ShowList();
	// ShowList(1);
	// ShowList(1, 2);
	// ShowList(1, 2, 3, "hello wordsss");
	return 0;
}
